In a system, a software application has data that is desired to be stored persistently. Persistence means that the stored information has to continue to exist even after one or more applications that saved and manipulated the data have ceased to run such as in the situation of either a warm or cold reboot.
Examples of typical memories used for persistent storage of data over reboots are Electrically Erasable Programmable Read Only Memory (EEPROM) and a variant of it, Flash memory. However, Flash memory and EEPROMs are not generally suitable to provide this functionality of persistent storage of data sent by software applications on a continuous basis during normal operation of a system. Neither EEPROM nor Flash memory is designed to be continuously written to as often as would be necessary by software applications running throughout the operation of the system, and would suffer a decreased life span. Flash memory is costly, and EEPROM is slow.
In many solutions, the application is responsible for controlling the allocation of memory and storage of data to be saved over a reboot. A shortcoming of these solutions is their need to use some type of semaphore protection to ensure that one application's access does not affect another's access. For example, the operating system may need to ensure that any memory allocated from non-volatile memory is reassigned to the same application for the same data structure after a reboot.
Furthermore, the application is responsible for controlling the retrieval of persistent application data during a reboot whether it be a warm-reboot or a cold-reboot.